package com.eastcode.base.util;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;

/**
 * GZIP工具类，用于Gzip格式的压缩及解压
 * 
 * @author Administrator
 * 
 */
public class GZipUtil {

	/**
	 * 压缩
	 * 
	 * @param str
	 * @return
	 * @throws IOException
	 */
	public static String compress(String str) {
		if (str == null || str.length() == 0) {
			return str;
		}
		try {
			ByteArrayOutputStream out = new ByteArrayOutputStream();
			GZIPOutputStream gzip = new GZIPOutputStream(out);
			gzip.write(str.getBytes());
			gzip.close();
			return out.toString("ISO-8859-1");
		} catch (Exception ex) {
			return "";
		}
	}

	/**
	 * 解压缩
	 * 
	 * @param str
	 * @return
	 * @throws IOException
	 */
	public static String uncompress(String str) {
		if (str == null || str.length() == 0) {
			return str;
		}
		try {
			ByteArrayOutputStream out = new ByteArrayOutputStream();
			ByteArrayInputStream in = new ByteArrayInputStream(str.getBytes("ISO-8859-1"));
			GZIPInputStream gunzip = new GZIPInputStream(in);
			byte[] buffer = new byte[256];
			int n;
			while ((n = gunzip.read(buffer)) >= 0) {
				out.write(buffer, 0, n);
			}
			// toString()使用平台默认编码，也可以显式的指定如toString("GBK")
			return out.toString("GBK");
		} catch (Exception ex) {
			return "";
		}
	}

	// 测试方法
	public static void main(String[] args) throws IOException {
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < 1000; i++) {
			sb.append(i + "测试");
		}
		String s = GZipUtil.compress(sb.toString());
		System.out.println("starttime=" + s + "\n" + s.length());
		s = GZipUtil.uncompress(s);
		System.out.println(s + "\n" + s.length());

	}
}
